<?php

/**
 * Маршрутизатор приложения
 *
 * @author asenko
 */
class Router {

    private $route;

    /**
     * Метод, который находит для текущего запроса его класс и список параметров, которые будут ему переданы.
     * Все контентные классы обязательно содержат методы get_content и __set (за этим проследит их интерфейс)
     * 
     * @return array массив из имени класса, метода и параметров, которые ей будут переданы.
     */
    public function get() {
        // а что там у нас за маршрут?
        // в маршруте учавствует только дополнительная информация о пути ( например, /groups/list )
        if (!isset($_SERVER['PATH_INFO']) || $_SERVER['PATH_INFO'] == '/index.php') {
            // никакого маршрута нет
            $this->route = '/';
        } else {
            $this->route = $_SERVER['PATH_INFO'];
        }
        $config = $config = get_config('router');
        foreach ($config AS $route) {
            list($pattern, $action) = $route;
            if (preg_match($pattern, $this->route, $matches)) {
                // нашли маршрут.
                switch (count($action)) {
                    case 3: {
                            list($class, $method, $_params) = $action;
                        } break;
                    case 2: {
                            list($class, $method) = $action;
                            $_params = NULL;
                        } break;
                }
                // обрабатываем параметры
                $func_param = array();

                if (is_array($_params)) {
                    foreach ($_params AS $param) {
                        if (isset($matches[$param])) {
                            $func_param[] = $matches[$param];
                        }
                    }
                }
                // возврашаем
                return array($class, $method, $func_param);
            }
        }
        // не нашли маршрут..
        throw new Exception('Error_404');
    }

}

?>
